/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package dao;

import media.Media;
import media.Video;
import java.util.ArrayList;
import java.util.Iterator;
import java.util.List;
import java.util.Set;
import java.util.SortedMap;
import java.util.TreeMap;
import vue.FicheMediaAbstract;
import vue.FicheMediaVideo;

/**
 * Classe VideoDAO qui permet d'accéder aux videos de l'application
 * @author Florian Minin & Khemon Beh
 */
public class VideoDAO extends MediaDAOAuteur<Video> {

    //On utilise une SortedMap pour que les cles soit rangées
    //en ordre croissant
    private SortedMap<Integer, Video> listeVideo;

    /**
     * Constructeur de la classe VideoDAO
     */
    public VideoDAO() {
        listeVideo = new TreeMap<Integer, Video>();
    }

    @Override
    public void ajouter(Video video) {
        int cle;
        //Si c'est le premier media qu'on ajoute
        if (listeVideo.isEmpty()) {
            //La clé vaut 1
            cle = 1;
        } else {
            //Sinon on récupère la plus grande clé de la map
            //qu'on incrémente de 1
            cle = listeVideo.lastKey() + 1;
        }
        video.setIdMedia(cle);
        //Par défaut on met le nom du fichier sans l'extension comme titre de la musique
        video.setTitre(video.getNomFichier().substring(0,video.getNomFichier().lastIndexOf(".")));
        listeVideo.put(cle, video);
    }

    @Override
    public void modifier(Video video) {
        listeVideo.put(video.getIdMedia(), video);
    }

    @Override
    public void noter(Video video, int note) {
        video.setNote(note);
        listeVideo.put(video.getIdMedia(), video);
    }

    @Override
    public Media getMedia(int id) {
        Media video = listeVideo.get(id);
        return video;

    }

    @Override
    public void supprimerMedia(Video video) {
        listeVideo.remove(video.getIdMedia());
    }

    @Override
    public List<Video> getListMedia() {
        List l = new ArrayList();
        Set cles = listeVideo.keySet();
        Iterator iterator = cles.iterator();

        while (iterator.hasNext()) {
            l.add(listeVideo.get(iterator.next()));
        }
        return l;
    }

    @Override
    public SortedMap<Integer, Video> getMapMedia() {
        return listeVideo;
    }

    public void setMapMedia(SortedMap<Integer, Video> listeVideo) {
        this.listeVideo = listeVideo;
    }

    @Override
    public Media creeMediaGenerique() {
        return new Video();
    }

    @Override
    public String getTypeMedia() {
        return "Video";
    }

    @Override
    public FicheMediaAbstract getFicheMedia() {
        return new FicheMediaVideo();
    }
}
